/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.negocio;

import ejb.dao.ConsumoDAOLocal;
import ejb.dao.EmpresaDAOLocal;
import ejb.dao.TarjetaDAOLocal;
import ejb.dao.TransporteDAOLocal;
import entidades.Consumo;
import entidades.Transporte;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ListIterator;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author pauloe
 */
@Stateless
public class GestorEmpresaService implements GestorEmpresaServiceLocal {

    @EJB
    ConsumoDAOLocal consumoDAO;
    @EJB
    TarjetaDAOLocal tarjetaDAO;
    @EJB
    TransporteDAOLocal transporteDAO;
    @EJB
    EmpresaDAOLocal empresaDAO;

    @Override
    public List<Consumo> consultarConsumos(int cuit) {
        //listar todos los transportes de la empresa con cuit correspondiente
        List<Transporte> transportes = transporteDAO.findTransportesByEmpresa(cuit);
        //inicializar un iterador para los elementos de dicha lista
        ListIterator it = transportes.listIterator();
        //inicializar una lista que recoge todos los consumos para la empresa con cuit correspondiente
        List<Consumo> consumosEmpresa = new ArrayList<>();
        //por cada transporte de la empresa, cargar en la lista de retorno, los consumos que registro
        while (it.hasNext()) {
            Transporte t = (Transporte) it.next();
            consumosEmpresa.addAll(consumoDAO.findConsumosByTransporte(t.getPatente()));
        }
        return consumosEmpresa;
    }

    @Override
    public List<Consumo> consultarConsumos(int cuit, Date desde, Date hasta) {
        //listar todos los transportes de la empresa con cuit correspondiente
        List<Transporte> transportes = transporteDAO.findTransportesByEmpresa(cuit);
        ListIterator itT = transportes.listIterator();
        //inicializar una lista que recoge todos los consumos para la empresa con cuit correspondiente
        List<Consumo> consumosEmpresa = new ArrayList<Consumo>();
        while (itT.hasNext()) {
            Transporte t = (Transporte) itT.next();
            //obtener todos los consumos del transporte correspondiente
            List<Consumo> consumosTransporte = consumoDAO.findConsumosByTransporte(t.getPatente());
            ListIterator itC = consumosTransporte.listIterator();
            while (itC.hasNext()) {
                Consumo c = (Consumo) itC.next();
                Boolean between = true;
                //si la fecha del consumo es anterior al parametro desde
                if ((desde != null) && (c.getFechaHora().compareTo(desde) < 0)) {
                    between = false;
                }
                //si la fecha del consumo es posterior al parametro hasta
                if ((hasta != null) && (c.getFechaHora().compareTo(hasta) > 0)) {
                    between = false;
                }
                if (between) {
                    consumosEmpresa.add(c);
                }
            }
        }
        return consumosEmpresa;
    }

}
